#ifndef GRAPH_H
#define GRAPH_H

#include "utils.h"
#include "list.h"
#include "queue.h"
#include "sorter.h"
#include "sortstrategy.h"

class Graph
{
private:
	int size;
	//Vertex *vertexArray;
	vector<Vertex> vertexVector;
	List edgeList;

public:
	enum Algorithm
	{
		prim_heap,
		prim_unordered,
		prim_stdqueue,
		kruskal_heapsort,
		kruskal_mergesort,
		kruskal_bubblesort,
		kruskal_stdsort
	};

	//Graph() : size(0), vertexArray(0) {}
	//~Graph() { delete [] vertexArray; }

	Graph() : size(0) {}
	~Graph() {}
	
	void generatePoints(const std::string &filename, int size);
	void savePoints(const std::string &filename);
	void loadPoints(const std::string &filename);
	void calculateMST(Algorithm algorithm);
	void saveMST(const std::string &filename);
	
};

#endif
